import { getToken, removeToken, setToken, setTokenTime } from '@/utils/auth'
import { getUserInfo, login, getUserDetailByid } from '@/api/user'
// import { copyWithin } from 'core-js/core/array'
const state = {
  token: getToken(), //  设置token为共享状态 初始化 vuex 先从缓存中读取
  userInfo: {}
}
const mutations = {
  setToken(state, token) {
    // 把token 存储在 cookien
    setToken(token)
    state.token = token // 将数据给vuex
    //   同步给缓存
  },

  removeToken(state) {
    state.token = null // 删除vuex的token
    removeToken() // 先清除 vuex  再清除缓存 vuex和 缓存数据的同步
  },
  setUserInfo(state, resulte) {
    state.userInfo = resulte //  响应式的数据
    // state.userInfo={...resulte}  //  浅拷贝
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(context, data) {
    // 调用 api的接口
    const resulte = await login(data) //  拿到token
    // console.log(resulte)
    //   axios 默认加了一层 data
    // console.log(res);

    // 如果表示为 true 则登录成功 调用commit 提交 Mutation
    // context.commit('setToken', res.data.data)
    context.commit('setToken', resulte) //  设置token
    setTokenTime() //  设置当前时间戳
  },
  async getUserInfo(context) {
    const result = await getUserInfo()
    // console.log(result)
    const baseInfo = await getUserDetailByid(result.userId)
    // const obj = { ...baseInfo, ...result }
    context.commit('setUserInfo', { ...baseInfo, ...result }) //  提交到mutation
  },
  logout(context) {
    context.commit('removeToken'), context.commit('removeUserInfo')
  }
}
export default {
  // 解耦
  namespaced: true,
  // state () {
  //   return {}
  // },
  state,
  mutations,
  actions
}
